package backtype.storm.scheduler;

import java.util.Map;


public interface IScheduler {

    void prepare(Map conf);


    /**
     * Set assignments for the topologies which needs scheduling. The new
     * assignments is available through <code>cluster.getAssignments()</code>
     * 
     * @param topologies
     *            all the topologies in the cluster, some of them need schedule.
     *            Topologies object here only contain static information about
     *            topologies. Information like assignments, slots are all in the
     *            <code>cluster</code>object.
     * @param cluster
     *            the cluster these topologies are running in.
     *            <code>cluster</code> contains everything user need to develop
     *            a new scheduling logic. e.g. supervisors information,
     *            available slots, current assignments for all the topologies
     *            etc. User can set the new assignment for topologies using
     *            <code>cluster.setAssignmentById</code>
     */
    void schedule(Topologies topologies, Cluster cluster);
}
